Como su nombre indica, Google Trends es una herramienta que, en base a los datos registrados en el motor de búsqueda de Google, muestra de manera dinámica y gráfica la frecuencia de temas y términos de búqueda de los usuarios en determinado lapso de tiempo o región del mundo. Por así decirlo, mide la popularidad de cierto tema en un período concreto y en un lugar específico e incluso en determinada plataforma.
Importar librerias necesarias para este trabajo
library(tidyverse)
library(cowplot)
library(ggplot2)
library(sf)
library(tmap)
library(gt)
library(tibble)
library(knitr)
library(kableExtra)
library(DataExplorer)
library(gganimate)
library(dplyr)
library(gtrendsR)
library(RColorBrewer)
library(wordcloud)
library(wordcloud2)
library(tm)
En este caso vamos a utilizar tidyverse y cowplot. La librería cowplot nos va a ayudar a colocar varias gráficas de forma fácil y ordenada en un sólo espacio EDA de datos de INEGI.
- ggplot2 Que facilita la creación de gráficas con el sistema de capas
(The Language of Graphics escrito por Leland Wilkinson, 2000)
- dplyr que nos ayuda a mandar resultados de un proceso al siguiente
utilizando los famosos %>%
- tibble que facilita la manipulación de tablas, transformando los
tradicionales data.frame de R a un formato mas amigable visualmente.
Cargar los datos necesarios para este ejercicio Fuente
# Extraer los datos
path.to.files <- "https://raw.githubusercontent.com/teotenn/INEGI-export/master/"
# Leer los datos por filar
datos_cols <- read_csv(paste0(path.to.files, "exportations_activity_cols.csv"))
## Rows: 384 Columns: 27
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): state
## dbl (26): year, Exportaciones totales, Industria alimentaria, Industria de l...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Revisar el tipo de dato de datos_cols
class(datos_cols)
## [1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
Revisar las primeras 10 observaciones de los datos_cols
head(datos_cols, 12)
## # A tibble: 12 × 27
## state year `Exportaciones totales` `Industria alimentaria`
## <chr> <dbl> <dbl> <dbl>
## 1 Aguascalientes 2007 4389841 36351
## 2 Aguascalientes 2008 4456893 44880
## 3 Aguascalientes 2009 3951108 54269
## 4 Aguascalientes 2010 5647929 56695
## 5 Aguascalientes 2011 6051640 74756
## 6 Aguascalientes 2012 6183782 92580
## 7 Aguascalientes 2013 6726207 99725
## 8 Aguascalientes 2014 8466007 106988
## 9 Aguascalientes 2015 8495445 117028
## 10 Aguascalientes 2016 7870962 106119
## 11 Aguascalientes 2017 7830019 108958
## 12 Aguascalientes 2018 9618407 116315
## # ℹ 23 more variables: `Industria de las bebidas y el tabaco` <dbl>,
## # `Fabricación de insumos textiles y acabado de textiles` <dbl>,
## # `Fabricación de productos textiles, excepto prendas de vestir` <dbl>,
## # `Fabricación de prendas de vestir` <dbl>, `Industria del papel` <dbl>,
## # `Industria química` <dbl>, `Industria del plástico y del hule` <dbl>,
## # `Fabricación de productos a base de minerales no metálicos` <dbl>,
## # `Industrias metálicas básicas` <dbl>, …
Revisar los nombres de datos_cols
colnames(datos_cols)
## [1] "state"
## [2] "year"
## [3] "Exportaciones totales"
## [4] "Industria alimentaria"
## [5] "Industria de las bebidas y el tabaco"
## [6] "Fabricación de insumos textiles y acabado de textiles"
## [7] "Fabricación de productos textiles, excepto prendas de vestir"
## [8] "Fabricación de prendas de vestir"
## [9] "Industria del papel"
## [10] "Industria química"
## [11] "Industria del plástico y del hule"
## [12] "Fabricación de productos a base de minerales no metálicos"
## [13] "Industrias metálicas básicas"
## [14] "Fabricación de productos metálicos"
## [15] "Fabricación de maquinaria y equipo"
## [16] "Fabricación de equipo de computación, comunicación, medición y de otros equipos, componentes y accesorios electrónicos"
## [17] "Fabricación de equipo de transporte"
## [18] "Fabricación de muebles, colchones y persianas"
## [19] "Otras industrias manufactureras"
## [20] "Subsectores no especificados"
## [21] "Minería de minerales metálicos y no metálicos, excepto petróleo y gas"
## [22] "Curtido y acabado de cuero y piel, y fabricación de productos de cuero, piel y materiales sucedáneos"
## [23] "Industria de la madera"
## [24] "Impresión e industrias conexas"
## [25] "Fabricación de accesorios, aparatos eléctricos y equipo de generación de energía eléctrica"
## [26] "Extracción de petróleo y gas"
## [27] "Fabricación de productos derivados del petróleo y del carbón"
Revisar las primeras 10 observaciones de los datos_rows
head(datos_cols, 10)
## # A tibble: 10 × 27
## state year `Exportaciones totales` `Industria alimentaria`
## <chr> <dbl> <dbl> <dbl>
## 1 Aguascalientes 2007 4389841 36351
## 2 Aguascalientes 2008 4456893 44880
## 3 Aguascalientes 2009 3951108 54269
## 4 Aguascalientes 2010 5647929 56695
## 5 Aguascalientes 2011 6051640 74756
## 6 Aguascalientes 2012 6183782 92580
## 7 Aguascalientes 2013 6726207 99725
## 8 Aguascalientes 2014 8466007 106988
## 9 Aguascalientes 2015 8495445 117028
## 10 Aguascalientes 2016 7870962 106119
## # ℹ 23 more variables: `Industria de las bebidas y el tabaco` <dbl>,
## # `Fabricación de insumos textiles y acabado de textiles` <dbl>,
## # `Fabricación de productos textiles, excepto prendas de vestir` <dbl>,
## # `Fabricación de prendas de vestir` <dbl>, `Industria del papel` <dbl>,
## # `Industria química` <dbl>, `Industria del plástico y del hule` <dbl>,
## # `Fabricación de productos a base de minerales no metálicos` <dbl>,
## # `Industrias metálicas básicas` <dbl>, …
Los valores ausentes o faltantes influyen mucho a la hora de crear modelos, algunos algoritmos no aceptan observaciones incompletas o bien se ven muy influenciados por ellas, en este caso las Métricas de evaluación, no admiten valores faltantes, por lo que es necesario identifcar con cuantos N/A, cuenta nuetro data frame.
Para identifica el número de datos ausentes por variable vamos a emplear la siguiente función
plot_missing(
data = datos_cols,
title = "Porcentaje de valores Faltantes por variable",
ggtheme = theme_bw(),
theme_config = list(legend.position = "none")
)
Eliminar los datos faltes
datos_cols_0 <- na.omit(datos_cols)
En este caso lo primero es seleccionar solo algunos de los datos que tiene este data frame para esto es necesario seleccionar las columnas de 1 s 5, de 21 a 23, 25 a 27
- 1 state
- 2 year
- 3 Exportaciones totales
- 4 Industria alimentaria
- 5 Industria de las bebidas y el tabaco
- 21 Minería de minerales metálicos y no metálicos, excepto petróleo y gas
- 22 Curtido y acabado de cuero y piel, y fabricación de productos de cuero, piel
- 23 Industria de la madera
- 25 Fabricación de accesorios, aparatos eléctricos y equipo de generación de energía eléctrica
- 26 Extracción de petróleo y gas
- 27 Fabricación de productos derivados del petróleo y del carbón
Para esto vamos a emplear la función de select() y
seleccionamos las columnas con base a la númeración anterior
datos_0 <- select(datos_cols, c(1,2,3,4,5,21,22,23,25,26,27))
Como segundo paso vamos cambiar los nombres de las variables, ya que son demasiado largos y puede generar problemas, para esto lo primero es generar un vector con los nombres que se desean en el data frame de datos_0
nombres <- c("Estado", "Year", "Totales", "Alimentaria", "Bebidas", "Mineria_Metal_Notal",
"Curtido_Piel", "Madera", "Electronicos", "Extraccion_Petroleo_Gas",
"Productos_Petroleo_Gas")
nombres
## [1] "Estado" "Year"
## [3] "Totales" "Alimentaria"
## [5] "Bebidas" "Mineria_Metal_Notal"
## [7] "Curtido_Piel" "Madera"
## [9] "Electronicos" "Extraccion_Petroleo_Gas"
## [11] "Productos_Petroleo_Gas"
Ahora vamos a usar la función de names() incorporando el
data frame de datos_0 y le asignamos el vector de
nombres
names(datos_0) <- nombres
El siguiente paso es realizar un group_by() por estado
para generar un nuevo data frame con el promedio de los 12 años (2007 -
2018) por estado.
La función group_by() agrupa un conjunto de filas seleccionado en un conjunto de filas de resumen de acuerdo con los valores de una o más columnas o expresiones.
La función group_by() es extremadamente útil trabajando
en conjunción con la función summarise():
pollution %>% group_by(city) %>%
summarise(mean = mean(amount), sum = sum(amount), n = n())
En este ejemplo vamos a agrupar por Estado y calcular la media de cada sector y almacenarlo en la variable de datos_1
datos_1 <- datos_0 %>%
group_by(Estado) %>%
summarise(Totales = mean(Totales),
Alimentaria = mean(Alimentaria),
Bebidas = mean(Bebidas),
Mineria_Metal_Notal = mean(Mineria_Metal_Notal),
Curtido_Piel = mean(Curtido_Piel), SW_mena = mean(Madera),
Electronicos = mean(Electronicos), Ext_P_G = mean(Extraccion_Petroleo_Gas),
Productos_P_G = mean(Productos_Petroleo_Gas)
)
Visualizar las 10 primeras observaciones de datos_1
head(datos_1)
## # A tibble: 6 × 10
## Estado Totales Alimentaria Bebidas Mineria_Metal_Notal Curtido_Piel SW_mena
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Aguascal… 6.64e6 84555. NA NA NA NA
## 2 Baja Cal… 3.32e7 151198. 97966. NA NA 43095.
## 3 Baja Cal… 1.92e5 28405. NA NA NA NA
## 4 Campeche 2.20e7 NA NA NA NA NA
## 5 Chiapas 1.11e6 108136. NA NA NA NA
## 6 Chihuahua 3.89e7 420840. 80031. 784567. 171142 NA
## # ℹ 3 more variables: Electronicos <dbl>, Ext_P_G <dbl>, Productos_P_G <dbl>
Visualizar los datos de forma interactiva
DT::datatable(datos_1)
La visualización de datos ha ganado espacio en diversas publicaciones y en las últimas décadas ya constituye una disciplina en sí misma.
En este paso se realizara una visualización tus datos usando el
paquete ggplot2. D
e los muchos sistemas que posee R para hacer gráficos, ggplot2 es uno de los más elegantes y versátiles. Esto se debe a que ggplot2 implementa un sistema c oherente para describir y construir gráficos,
conocido como la gramática de gráficos. Con ggplot2 puedes hacer más cosas en menor tiempo, aprendiendo un único sistema y aplicándolo en diferentes ámbitos.
Generar grafico
ggplot(datos_1) +
geom_bar(aes(y = Totales,
x = Estado,
fill = Totales),
stat = 'identity')
Modificar el gráfico para poder dar un mejor diseño
ggplot(datos_1) +
geom_bar(aes(y = Totales,
x = reorder(Estado, Totales, FUN = abs),
fill = Totales),
stat = 'identity') +
coord_flip()
ggplot(datos_1) +
geom_bar(aes(y = Totales,
x = reorder(Estado, Totales, FUN = abs),
fill = Totales),
stat = 'identity') +
labs(title = "Exportación media por Estado (2007 - 2018)",
x = "Estado") +
coord_flip()
Generar un grafico que muetsre el comportamiento de las exportaciones totales atra vez del tiempo
ggplot(dplyr::filter(datos_0, Estado == "Aguascalientes"),
aes(x = Year, y = Totales)) +
geom_line() +
geom_point() +
facet_wrap(~`Estado`) +
theme_minimal() +
transition_reveal(Year)+
coord_cartesian(clip = 'off') +
enter_fade() +
exit_shrink()
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
dplyr::filter(datos_0, Estado == "Aguascalientes")
## # A tibble: 12 × 11
## Estado Year Totales Alimentaria Bebidas Mineria_Metal_Notal Curtido_Piel
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Aguascali… 2007 4389841 36351 NA NA NA
## 2 Aguascali… 2008 4456893 44880 NA NA NA
## 3 Aguascali… 2009 3951108 54269 NA NA NA
## 4 Aguascali… 2010 5647929 56695 NA NA NA
## 5 Aguascali… 2011 6051640 74756 0 NA NA
## 6 Aguascali… 2012 6183782 92580 NA NA NA
## 7 Aguascali… 2013 6726207 99725 0 NA NA
## 8 Aguascali… 2014 8466007 106988 0 NA NA
## 9 Aguascali… 2015 8495445 117028 NA NA NA
## 10 Aguascali… 2016 7870962 106119 NA NA NA
## 11 Aguascali… 2017 7830019 108958 NA NA NA
## 12 Aguascali… 2018 9618407 116315 NA NA NA
## # ℹ 4 more variables: Madera <dbl>, Electronicos <dbl>,
## # Extraccion_Petroleo_Gas <dbl>, Productos_Petroleo_Gas <dbl>
Crear un Boxplot en R
ggplot(datos_1, aes(x = Estado, y = Totales, fill=Estado)) +
geom_boxplot()
= < >
ggplot(dplyr::filter(datos_1, Totales >= 30000000), aes(x = Estado, y = Totales, fill=Estado)) +
geom_boxplot()
Como siguiente paso es necesario generar una union espacial, para esto es necesario primero buscar que claves se presentan en estados y en el data frame de datos_1
datos_1$Cve_Ent <- as.integer(seq(1:32))
estados <- read_sf("Datos/Estados.shp")
estados$Ent_Cve
## [1] 1 2 3 4 8 9 5 6 7 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32
estados_1 <- inner_join(x = estados, y = datos_1, by = c("Ent_Cve" = "Cve_Ent"))
tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(estados_1) +
tm_fill(col = "Totales",
palette = "Oranges",
style = "cont",
contrast = c(0.1,1),
title = "Exportacion media por Estado (2007 - 2018)",
id = "Estado",
showNA = FALSE,
alpha = 0.8,
popup.vars = c( "Industria alimentaria" = "Alimentaria",
"Exportaciones 2007-2018" = "Totales"
# "Escorrentia Promedio 2011" = "Esc_mean_2011",
# "Infiltracion Promedio 2011" = "Inf_mean_2011"
))+
tm_borders(col = "darkgray", lwd = 0.6)+
tm_basemap("OpenStreetMap")